
// 根据给定的数组和属性从源数组中获取数据
export function getDataByGivenArray(sourceArray, indexArray, indexKey) {
    var array = [];
    for (var i = 0; i < sourceArray.length; i++) {
        if (indexArray.indexOf(sourceArray[i][indexKey]) > -1) {
            if (sourceArray[i] !== undefined) {
                array.push(sourceArray[i]);
            }
        }
    }
    return array;
}



// 链接中有多余的& 取出参数值
// 使用DOMParser API来解码HTML实体
// 请注意，此解决方案需要DOM环境，因此它可以在浏览器中工作，但在没有DOM实现的Node. js环境中则不行。
export function decodeUrlWithSpecialChar(url_html) {
    var txt = document.createElement("textarea");
    txt.innerHTML = url_html;
    return new URLSearchParams((new URL(txt.value)).search);
}

// 基于某个特定属性创建嵌套数组
export function getRegroupedArrByPointedAttr(arr, attr) {
    return Object.values(arr.reduce((acc, curr) => {
        // acc是上次调用函数的返回值
        // 会保留上次调用函数进行操作后的值
        // acc初始值是空对象
        // curr是当前元素
        const group = curr[attr];
        if (!acc[group]) {
            acc[group] = [];
        }
        // acc[group] 相当于以group作为键 该键对应的值是数组（在上一步就初始化为数组）
        // 相同的group被添加到相同键下面的值
        acc[group].push(curr);
        return acc;
    }, {}));
}


// 将一个数组的顺序随机打乱
export function shuffleArray(array) {
    // 从数组最后一个索引遍历
    for (let i = array.length - 1; i > 0; i--) {
        // 生成随机数
        const j = Math.floor(Math.random() * (i + 1));
        // 交换索引i和索引j的元素
        [array[i], array[j]] = [array[j], array[i]];
    }
    return array;
}


// 以指定数量切分数组
export function getSplitArray(list, splitCount = 10) {
    const result = [];
    for (let i = 0; i < list.length; i += splitCount) {
        result.push(list.slice(i, i + splitCount));
    }
    return result;
}

